home *** CD-ROM | disk | FTP | other *** search
/ Power Tools for Macintosh / Power Tools for Macintosh (SoftBit)(1992).iso / Applications / Alpha 4.01 / ACMDS / Think Files.c < prev    next >
C/C++ Source or Header  |  1990-01-27  |  5KB  |  248 lines

  1. /*********************************************************************
  2. *                                                                    *
  3. * ThinkFiles - Extract ".c" files from a Think C 4.02 project file   *
  4. *                                                                    *
  5. * 10/15/90                                                           *
  6. * This hack is so terrible that I'm not putting my name on it,       *
  7. * the only saving grace is that it seems to work.                    *
  8. *                                                                    *
  9. * When debugging, set the project type to application,               *
  10. * and add the ANSI project.                                          *
  11. *                                                                    *
  12. * When all your bugs are out, 'undef' DEBUG, set the project         *
  13. * type to Code Resource, with type = ACMD, name = <the name          *
  14. * of the function>, file type to 'AEXT', and the purgeable           *
  15. * flag set to true.                                                  *
  16. *                                                                    *
  17. * Also, you need to remove the ANSI project from the ACMD            *
  18. * project and replace it with the ANSI-A4 project if you use         *
  19. * any functions in ANSI, such as strlen.                             *
  20. *                                                                    *
  21. * If you are not using THINK C, I'm not quite sure what you          *
  22. * should do. :-)                                                     *
  23. *                                                                    *
  24. *********************************************************************/
  25.  
  26.  
  27. #include    <MacHeaders>
  28.  
  29. #undef    DEBUG
  30.  
  31.  
  32. #ifndef    DEBUG
  33.  
  34. #include <SetUpA4.h>
  35.  
  36. #endif    DEBUG
  37.  
  38. #include <stdio.h>
  39. #include <string.h>
  40.  
  41. int        condensed = FALSE;        /* fool dir.c */
  42.  
  43. char *
  44. #ifdef    DEBUG
  45. dummy(inStr)
  46. #else    DEBUG
  47. main(inStr)
  48. #endif    DEBUG
  49. char    *inStr;
  50. {
  51.     OSErr        rf;
  52.     int            i, j, len, num, volLen;
  53.     char        str[256], str2[256];
  54.     Handle        hand;
  55.     char        *ptr, *dirPtr;
  56.     size_t        sz;
  57.     Point        dlg_org;
  58.     SFTypeList    theTypeList;
  59.     SFReply        theReply;
  60.     char        pathName[256];
  61.     char        *outStr;
  62.     char        *ptrs[100];
  63.     int            soFar = 0;
  64.     
  65. #ifndef    DEBUG
  66.     RememberA0();
  67.     SetUpA4();
  68. #endif    DEBUG
  69.     
  70.     /* set the pointer block to something real large */
  71.     outStr = NewPtr(10000L);
  72.     memcpy(outStr,inStr,GetPtrSize(inStr));
  73.     DisposPtr(inStr);
  74.     inStr = outStr;
  75.     
  76.     SetPt(&dlg_org,100,100);
  77.     theTypeList[0] = 'PROJ';
  78.     SFGetFile(dlg_org, "\pWhich Proj:", 0L, 1, theTypeList,0L,&theReply);
  79.     if (!theReply.good) 
  80.     {
  81.         SysBeep(1);
  82. #ifndef    DEBUG
  83.         RestoreA4();
  84. #endif    DEBUG
  85.         return FALSE;
  86.     }
  87.     pathName[0] = 0;
  88.     PathNameFromWD((long)theReply.vRefNum,pathName);
  89.     ptoc(pathName);
  90.     for (dirPtr = pathName + strlen(pathName); *--dirPtr != ':';);
  91.     dirPtr++;
  92.     *dirPtr = 0;
  93.     
  94.     SetVol("",theReply.vRefNum);
  95.     if ((rf = OpenResFile(theReply.fName)) <= 0)
  96.     {
  97.         SysBeep(1);
  98. #ifndef    DEBUG
  99.         RestoreA4();
  100. #endif    DEBUG
  101.         return(FALSE);
  102.     }
  103.     
  104.     num = Count1Resources('ZONE');
  105.     for (i = 1; i <= num; i++)
  106.     {
  107.         if (!(hand = Get1IndResource('ZONE',i)))
  108.         {
  109.             SysBeep(1);
  110.             continue;
  111.         }
  112.         HLock(hand);
  113.         ptr = *hand;
  114.         sz = GetHandleSize(hand);
  115.         for (ptr = *hand; ptr < (*hand + sz); ptr++)
  116.         {
  117.             if (!strncmp(ptr, ".c", 2L))
  118.             {
  119.                 for (j = 0; j < 256; j++)
  120.                 {
  121.                     if (*(ptr - j + 1) == j)
  122.                     {
  123.                         pStrcpy(str2,ptr - j + 1);
  124.                         ptoc(str2);
  125.                         
  126.                         /* see if we need to add path */
  127.                         for (len = strlen(str2), j=0; j < len; j++)
  128.                         {
  129.                             if (str2[j] == ':') break;
  130.                         }
  131.                         if (j == len)
  132.                         {
  133.                             strcpy(dirPtr,str2);
  134.                             strcpy(str2,pathName);
  135.                             *dirPtr = 0;
  136.                         }
  137.                         
  138.                         /* now check to make sure we don't already have this one */
  139.                         len = strlen(str2);
  140.                         for (j = 0; j < soFar; j++)
  141.                         {
  142.                             if (!strncmp(str2,ptrs[j], (long)len)) break;
  143.                         }
  144.                         if (j != soFar) break;
  145. #ifdef    DEBUG
  146.                         strcat(str2,"\n");
  147. #else
  148.                         strcat(str2,"\r");
  149. #endif    DEBUG
  150.                         ptrs[soFar++] = outStr;
  151.                         strcpy(outStr,str2);
  152.                         outStr += strlen(str2);
  153.                         break;
  154.                     }
  155.                 }
  156.             }
  157.         }
  158.         HUnlock(hand);
  159.         ReleaseResource(hand);
  160.     }
  161.     *outStr++ = 0;
  162.     SetPtrSize(inStr,outStr - inStr);
  163. #ifndef    DEBUG
  164.     RestoreA4();
  165. #endif    DEBUG
  166.     CloseResFile(rf);
  167.     return(inStr);
  168. }
  169.  
  170.  
  171. ctop(str)
  172. char    *str;
  173. {
  174.     size_t        len;
  175.     
  176.     len = strlen(str);
  177.     bcopy(str + 1, str, len);
  178.     str[0] = (char)len;
  179. }
  180.  
  181.  
  182. ptoc(str)
  183. char    *str;
  184. {
  185.     size_t        len = str[0];
  186.     
  187.     bcopy(str, str+1, len);
  188.     str[len] = 0;
  189. }
  190.  
  191.  
  192. pStrcat(s1,s2)
  193. char    *s1,*s2;
  194. {
  195.     strncpy(s1 + *s1 + 1,s2+1,(size_t)*s2);
  196.     *s1 += *s2;
  197. }
  198.  
  199.  
  200. pStrcpy(s1,s2)
  201. char    *s1, *s2;
  202. {
  203.     s1[0] = s2[0];
  204.     strncpy(s1+1,s2+1,(size_t)s2[0]);
  205. }
  206.  
  207.  
  208. pStrcmp(s1,s2)
  209. char     *s1, *s2;
  210. {
  211.     size_t        len = s1[0];
  212.     size_t        res;
  213.     
  214.     if (s2[0] < len) len = s2[0];
  215.     if (res = strncmp(s1+1,s2+1,len))
  216.         return(res);
  217.     return((int)(s1[0] - s2[0]));
  218. }
  219.  
  220.  
  221. bcopy(s1,s2,sz)
  222. char    *s1,*s2;
  223. size_t    sz;
  224. {
  225.     memmove(s1,s2,sz);
  226. }
  227.  
  228.  
  229. #ifdef    DEBUG
  230. main()
  231. {
  232.     char    *ptr;
  233.     
  234.     printf("Hello\n");
  235.     ptr = NewPtr(2L);
  236.     ptr = dummy(ptr);
  237.     printf("Return was:\n%s",ptr);
  238.  
  239.     ptr = NewPtr(2L);
  240.     ptr = dummy(ptr);
  241.     printf("Return was:\n%s",ptr);
  242.  
  243.     ptr = NewPtr(2L);
  244.     ptr = dummy(ptr);
  245.     printf("Return was:\n%s",ptr);
  246. }
  247. #endif    DEBUG
  248.